package projectodedalo.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import projectodedalo.excepcion.DAOExcepcion;
import projectodedalo.modelo.Discusion;
import projectodedalo.modelo.Secuencia;
import projectodedalo.modelo.Votacion;
import projectodedalo.util.ConexionBD;

public class DiscusionDAO extends BaseDAO {

	public Collection<Discusion> listarDiscusionxCodigo(int codigoIdea)
			throws DAOExcepcion {
		System.out.println("DiscusionDAO - listarDiscusionxCodigo(int codigoIdea)");
		
		String query = "SELECT d.CoDiscusion,d.cComentario,d.dfecha,d.PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea,d.PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario,c.cCodCentro " +
				" FROM discusion d INNER JOIN permitidos_ideas_usuario piu ON d.PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea=piu.IDEAS_cCodIdea " +
				" and d.PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario=piu.USUARIOS_nUsuario " +
				" INNER JOIN usuarios u ON d.PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario=u.nUsuario " +
				" INNER JOIN centro c ON u.CENTRO_cCodCentro=c.cCodCentro " + 
				" WHERE d.PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea=?";
		Collection<Discusion> objDiscusion = new ArrayList<Discusion>();
		Connection con = null;
		PreparedStatement stmt = null;
		PreparedStatement stmt1 = null;
		ResultSet rs = null;
		ResultSet rs1 = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codigoIdea);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Discusion vo = new Discusion();
				vo.setCodigoDiscusion(rs.getInt("CoDiscusion"));
				vo.setComentario(rs.getString("cComentario"));
				vo.setFecha(rs.getString("dFecha"));
				vo.setCodigoIdea(rs.getInt("PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea"));
				vo.setCodigoUsuario(rs.getInt("PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario"));
				
				
				String query1 = "SELECT CoVotacion, NuEstrellas,FeVotacion,Estado,PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea,PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario,CoDiscusion " +
						" FROM votacion " +
						" WHERE PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea=? and PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario=?";
				stmt1 = con.prepareStatement(query1);
				stmt1.setInt(1, vo.getCodigoIdea());
				stmt1.setInt(2, vo.getCodigoUsuario());
				rs1 = stmt1.executeQuery();
				Collection<Votacion> objVotacion = new ArrayList<Votacion>();
				while (rs1.next()) {
					Votacion vos = new Votacion();
					vos.setCodigoVotacion(rs1.getInt("CoVotacion"));
					vos.setNumeroEstrellas(rs1.getInt("NuEstrellas"));
					vos.setFechaVotacion(rs1.getString("FeVotacion"));
					vos.setEstado(rs1.getString("Estado"));
					vos.setCodigoIdea(rs1.getInt("PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea"));
					vos.setCodigoUsuario(rs1.getInt("PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario"));
					vos.setCodigoDiscusion(rs1.getInt("CoDiscusion"));
					objVotacion.add(vos);
				}
				if (objVotacion.size()!=0)
					vo.setObjVotacion(objVotacion);

				objDiscusion.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println("Sale de la Capa DAO");
		return objDiscusion;
	}

	public Collection<Discusion> insertarDiscusion(String comentario, int codigoIdea, int codigoUsuario, int calificacion) throws DAOExcepcion {
		// TODO Auto-generated method stub
		String query = "INSERT INTO discusion (cComentario,dfecha,PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea,PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario) " +
				" values (?,now(),?,?) ";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);			
			//rs = stmt.executeQuery();
			
			stmt.setString(1, comentario);
			stmt.setInt(2, codigoIdea);
			stmt.setInt(3, codigoUsuario);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar discusion");
			}
			
			query = "SELECT count(*) as total FROM discusion";
			stmt = con.prepareStatement(query);			
			rs = stmt.executeQuery();
			int xcodigoDiscusion=0;
			while (rs.next()) {
				xcodigoDiscusion=rs.getInt("total");
			}
			
			if (calificacion!=0) {
				query = "INSERT INTO votacion (NuEstrellas,FeVotacion,Estado,PERMITIDOS_IDEAS_USUARIO_IDEAS_cCodIdea,PERMITIDOS_IDEAS_USUARIO_USUARIOS_nUsuario,CoDiscusion) " +
						" values (?,now(),?,?,?,?) ";
				stmt = con.prepareStatement(query);
				stmt.setInt(1, calificacion);
				stmt.setString(2, "1");
				stmt.setInt(3, codigoIdea);
				stmt.setInt(4, codigoUsuario);
				stmt.setInt(5, xcodigoDiscusion);
				int j = stmt.executeUpdate();
				if (j != 1) {
					throw new SQLException("No se pudo insertar votacion");
				}
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	
		return null;
	}
}